home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 2010 April / PCWorld0410.iso / hity wydania / Ubuntu 9.10 PL / karmelkowy-koliberek-desktop-9.10-i386-PL.iso / casper / filesystem.squashfs / usr / share / pyshared / chardet / utf8prober.py < prev   
Text File  |  2006-10-21  |  3KB  |  77 lines

  1. ######################## BEGIN LICENSE BLOCK ########################
  2. # The Original Code is mozilla.org code.
  3. #
  4. # The Initial Developer of the Original Code is
  5. # Netscape Communications Corporation.
  6. # Portions created by the Initial Developer are Copyright (C) 1998
  7. # the Initial Developer. All Rights Reserved.
  8. #
  9. # Contributor(s):
  10. #   Mark Pilgrim - port to Python
  11. #
  12. # This library is free software; you can redistribute it and/or
  13. # modify it under the terms of the GNU Lesser General Public
  14. # License as published by the Free Software Foundation; either
  15. # version 2.1 of the License, or (at your option) any later version.
  16. # This library is distributed in the hope that it will be useful,
  17. # but WITHOUT ANY WARRANTY; without even the implied warranty of
  18. # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  19. # Lesser General Public License for more details.
  20. # You should have received a copy of the GNU Lesser General Public
  21. # License along with this library; if not, write to the Free Software
  22. # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
  23. # 02110-1301  USA
  24. ######################### END LICENSE BLOCK #########################
  25.  
  26. import constants, sys
  27. from constants import eStart, eError, eItsMe
  28. from charsetprober import CharSetProber
  29. from codingstatemachine import CodingStateMachine
  30. from mbcssm import UTF8SMModel
  31.  
  32. ONE_CHAR_PROB = 0.5
  33.  
  34. class UTF8Prober(CharSetProber):
  35.     def __init__(self):
  36.         CharSetProber.__init__(self)
  37.         self._mCodingSM = CodingStateMachine(UTF8SMModel)
  38.         self.reset()
  39.  
  40.     def reset(self):
  41.         CharSetProber.reset(self)
  42.         self._mCodingSM.reset()
  43.         self._mNumOfMBChar = 0
  44.  
  45.     def get_charset_name(self):
  46.         return "utf-8"
  47.  
  48.     def feed(self, aBuf):
  49.         for c in aBuf:
  50.             codingState = self._mCodingSM.next_state(c)
  51.             if codingState == eError:
  52.                 self._mState = constants.eNotMe
  53.                 break
  54.             elif codingState == eItsMe:
  55.                 self._mState = constants.eFoundIt
  56.                 break
  57.             elif codingState == eStart:
  58.                 if self._mCodingSM.get_current_charlen() >= 2:
  59.                     self._mNumOfMBChar += 1
  60.  
  61.         if self.get_state() == constants.eDetecting:
  62.             if self.get_confidence() > constants.SHORTCUT_THRESHOLD:
  63.                 self._mState = constants.eFoundIt
  64.  
  65.         return self.get_state()
  66.  
  67.     def get_confidence(self):
  68.         unlike = 0.99
  69.         if self._mNumOfMBChar < 6:
  70.             for i in range(0, self._mNumOfMBChar):
  71.                 unlike = unlike * ONE_CHAR_PROB
  72.             return 1.0 - unlike
  73.         else:
  74.             return unlike
  75.